package com.huitone.gddw.service.impl.monitoring.sms;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import com.huitone.gddw.dao.monitoring.sms.ISendSmLifeDao;
import com.huitone.gddw.model.support.QueryPage;
import com.huitone.gddw.service.dto.monitoring.sms.SendSmLifeDTO;
import com.huitone.gddw.service.monitoring.sms.ISendSmLifeService;
import com.huitone.gddw.utils.SysLoginUtil;

@Service
public class SendSmLifeService implements ISendSmLifeService{
	
	
	@Autowired
	private ISendSmLifeDao sendSmLifeDao;
	@Autowired
	private RedisTemplate stringRedisTemplate;

	@Override
	public List<SendSmLifeDTO> queryLifeTime(Map map) {
		
		return sendSmLifeDao.queryLifeTime(map);
	}

	@Override
	public QueryPage<SendSmLifeDTO> selectPage(QueryPage<SendSmLifeDTO> page) {
		
		
		List<SendSmLifeDTO> result = null;
//		int redisCount=0;
		int totalCount = 0;
		
		Map<String, Object> map = page.getParams();
		map.put("userId", SysLoginUtil.getLoginUserId());
		map.put("start", (page.getPageNo() - 1) * page.getPageSize() + 1);
		map.put("end", page.getPageNo() * page.getPageSize());
		map.put("limitCount", page.getPageNo() * page.getPageSize());
		
		result = sendSmLifeDao.queryLifeTime(map);
		totalCount = sendSmLifeDao.countQueryLife(map);
		
//	if(page.getPageNo()==1){
//			HashOpts hashOpts = new HashOpts();
//			hashOpts.setRedisTemplate(stringRedisTemplate);
//			String user = (String) map.get("userNo");
//			String startDate = (String) map.get("startDate");
//			String endDate = (String) map.get("endDate");
//
//			String keys="*:"+user;
//			Set<String> keysList = stringRedisTemplate.keys(keys);
//
//			for(String key:keysList){
//
//				String smContent = hashOpts.get(key, "Smcont");
//				String SmType = hashOpts.get(key, "SmType");
//				String sendCode = hashOpts.get(key, "SendResult");
//				String smSeq = hashOpts.get(key, "Send_seq");
//				String svrNode = hashOpts.get(key, "Srv_node");
//				String userNo = hashOpts.get(key, "User");
//				String recvTime = hashOpts.get(key, "recvTime");
//				//-------------------
//				String sendTime = hashOpts.get(key, "SendTime");
//				String sendFeedbackTime = hashOpts.get(key, "Notify_send_time");
//				String recvReportTime = hashOpts.get(key, "RecvTime");
//				String reportFeedbackTime = hashOpts.get(key, "ReportTime");
//				String curDealStatus = hashOpts.get(key, "CurDealStatus");
//			//说明是下行短信
//			if(SmType.equals("1")&&userNo.equals(map.get("userNo").toString())){
//				if(sendTime!=null&&!sendTime.equals("")){
//				if(startDate==null&&endDate==null){
//					Date sendDate = strToDate(sendTime.substring(0, 8), "yyyyMMdd");
//					long timeMillis = System.currentTimeMillis();
//					SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd");
//					String sendDate_time = sf.format(sendDate);
//					String current_time = sf.format(timeMillis);
//					SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//					if(sendDate_time.equals(current_time)){
//						//同一天
//						SendSmLifeDTO sendSmLifeDTO = new SendSmLifeDTO();
//						sendSmLifeDTO.setUserNo(userNo);
//						sendSmLifeDTO.setSendCode(sendCode);
//						sendSmLifeDTO.setSmSeq(smSeq);
//						sendSmLifeDTO.setSvrNode(svrNode);
//						sendSmLifeDTO.setSmContent(smContent);
//						sendSmLifeDTO.setRecvTime(strToDate(recvTime,"yyyyMMddHHmmss"));
//						sendSmLifeDTO.setSendTime(strToDate(sendTime,"yyyyMMddHHmmss"));;
//						sendSmLifeDTO.setSendFeedbackTime(strToDate(sendFeedbackTime,"yyyyMMddHHmmss"));;
//						sendSmLifeDTO.setRecvReportTime(strToDate(recvReportTime,"yyyyMMddHHmmss"));;
//						sendSmLifeDTO.setReportFeedbackTime(strToDate(reportFeedbackTime,"yyyyMMddHHmmss"));
//						sendSmLifeDTO.setCurDealStatus(curDealStatus);
//						int index=getIndexCompareDate(sendSmLifeDTO.getSendTime(),result);
//						result.add(index, sendSmLifeDTO);
//						redisCount+=1;
//					}
//				}else{
//							Calendar date = Calendar.getInstance();
//							date.setTime(strToDate(sendTime.substring(0, 8), "yyyyMMdd"));
//
//							Calendar begin = Calendar.getInstance();
//							begin.setTime(strToDate(startDate,"yyyyMMdd"));
//
//							Calendar end = Calendar.getInstance();
//							end.setTime(strToDate(endDate,"yyyyMMdd"));
//
//
//							if ((date.after(begin) && date.before(end))||date.equals(begin)) {
//								//在时间区间里
//								SendSmLifeDTO sendSmLifeDTO = new SendSmLifeDTO();
//								sendSmLifeDTO.setUserNo(userNo);
//								sendSmLifeDTO.setSendCode(sendCode);
//								sendSmLifeDTO.setSmSeq(smSeq);
//								sendSmLifeDTO.setSvrNode(svrNode);
//								sendSmLifeDTO.setSmContent(smContent);
//								sendSmLifeDTO.setRecvTime(strToDate(recvTime,"yyyyMMddHHmmss"));
//								sendSmLifeDTO.setSendTime(strToDate(sendTime,"yyyyMMddHHmmss"));;
//								sendSmLifeDTO.setSendFeedbackTime(strToDate(sendFeedbackTime,"yyyyMMddHHmmss"));;
//								sendSmLifeDTO.setRecvReportTime(strToDate(recvReportTime,"yyyyMMddHHmmss"));;
//								sendSmLifeDTO.setReportFeedbackTime(strToDate(reportFeedbackTime,"yyyyMMddHHmmss"));
//								sendSmLifeDTO.setCurDealStatus(curDealStatus);
//								int index=getIndexCompareDate(sendSmLifeDTO.getSendTime(),result);
//								result.add(index, sendSmLifeDTO);
//								redisCount+=1;
//							}
//
//				}
//
//			}
//			}
//			}
//	}
			
//			if(result.size()==0){
//				totalCount=0;
//			}else {
//				totalCount+=redisCount;
//			}
			
			//调整序号
			
//			for(int i=0;i<=result.size()-1;i++){
//				result.get(i).setSeq(i+1);
//
//			}
			

		QueryPage<SendSmLifeDTO> queryPage = new QueryPage<SendSmLifeDTO>();
		queryPage.setResult(result);
		queryPage.setPageNo(page.getPageNo());
		queryPage.setPageSize(page.getPageSize());
		queryPage.setTotalCount(totalCount);
		return queryPage;

		
	}

	private int getIndexCompareDate(Date sendTime, List<SendSmLifeDTO> result) {
		
		for(int i=0;i<=result.size()-1;i++){
			
			Calendar date = Calendar.getInstance();
			date.setTime(sendTime);

			Calendar begin = Calendar.getInstance();
			begin.setTime(result.get(i).getSendTime());			
			if (date.after(begin)) {	
				return i;		
			}	
		}
		
		return result.size();
	}
public static Date strToDate(String str, String pattern) {
		
		SimpleDateFormat format = null;
		
			format = new SimpleDateFormat(pattern);
		
		try {
			return format.parse(str);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		
		return null;
	}

	
	
	
	

}
